/* 
 * 高阶函数的概念：1、一个函数的参数是一个函数，我们可以称之为这个函数为高阶函数（函数的参数为函数）
                  2、一个函数返回一个函数我们也称之为高阶函数（函数返回函数）
*/
function eat(...arg) {
  console.log('吃饭', ...arg);
}

// 在开发的过程中我们不希望破坏（更改）原有的函数，要对这个函数进行扩展
// 我们希望对函数进行扩展

Function.prototype.before = function (beforeFn) {
  return (...arg) => { // newFn中的所有参数
    // 箭头函数没有this，那么就会向上查找
    beforeFn(); // 扩展函数
    this(...arg)
  }
}


let newFn = eat.before(() => { // before接受了一个函数，作为参数，所以before函数就是一个高阶函数
  console.log("刷牙");
})

newFn("火腿肠");

// 以后再扩展代码的时候 尽量不直接更改原来的函数，采用高阶函数进行包裹，在内部进行扩展